-
Notifications
You must be signed in to change notification settings - Fork 215
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
簡易パースをしてnonumを採番スキップする #554
Conversation
@@ -35,6 +33,7 @@ def initialize(book, number, name, path, io = nil) | |||
end | |||
if !@content && @path && File.exist?(@path) | |||
@content = File.read(@path).sub(/\A\xEF\xBB\xBF/u, '') | |||
@number = nil if check_header == "nonum" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
このcheck_headerってChapterのインスタンスを作るときに1回だけチェックしているようですが、[nonum]
が章・節・小節等のいろんなところに出たり出なかったりする場合でもこのコードで問題ないんでしょうか…?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
そうか、だめですねこれでは…
だいぶ厄介な気がしてきましたぞ…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
いや、大丈夫っぽいです。
ここでやっていることは
- ともかく先頭の見出しを探して(最初のレベルが1とは限らない)、
- nonum, nodisp, notocだったらそのファイルは章として採番しない(章カウンタをスキップしたい)ので、このChapterオブジェクトのnumber参照時をnilにする
という目的です。
本文のほうは、HTMLBuilderであればheadline→sec_counterで採番していますが、nonumはnonum_beginに落ちてsec_counterを使わないので採番増加も起きません(ほかのno*も同様)。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
名前をfind_first_header_option にでもするか
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほど、ここのロジックとしては理解できました。先頭が章レベルの見出しじゃない場合があるのが微妙な挙動につながるわけですね。うーむ。
#550 のパッチをさらに進めて、nonumの採番を飛ばすようにしてみました。
Chapter#initializeでコンテンツを読み込んでたので、ここでヘッダを探して(Chapter#check_header)見出しタグのtag部がnonumだったらnumberをnilにします。
……で、せっかくPEG化も考えている中、check_headerがまたcompiler由来の正規表現コードになっています。簡易としてヘッダとブロック以外は考えずに解析を回しています。